package com.czy.annotation;

import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;

/**
 *  @Target：描述注解能够作用的位置
 *      ElementType取值：
 *          TYPE：可以作用于类上
 *          METHOD：可以作用于方法上
 *          FIELD：可以作用于成员变量上
 *
 *  @Retention：描述注解被保留的阶段
 *      @Retention(RetentionPolicy.RUNTIME)：当前被描述的注解，会保留到class字节码文件中，并被JVM读取到
 *
 *  @Documented：描述注解是否被抽取到api文档中
 *
 *  @Inherited：描述注解是否被子类继承
 */
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Pro {
    String className() default "";

    @AliasFor(attribute = "value")
    String methodName() default "";

    /**
     * 当使用注解，仅给value属性赋值时，此时value属性可以省略，只写属性值
     * @return
     */
    @AliasFor(attribute = "methodName")
    String value() default "";
}
